﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using LoungeRepo.Contracts.EntityStore;
using LoungeRepo.DispatcherEntityStore;
using NUnit.Framework;
using Rhino.Mocks;

namespace Test.LoungeRepo.DispatcherEntityStore
{
    [TestFixture]
    public class testFindEntityStoreForPartition
    {
        [Test]
        public void Uses_default_store_if_no_other_is_registered()
        {
            var defaultEntityStore = MockRepository.GenerateMock<IEntityStore>();

            var sut = new RegexDispatcherEntityStore();
            sut.RegisterDefaultPartitionEntityStore(defaultEntityStore);

            Assert.AreSame(defaultEntityStore, sut.FindEntityStoreForPartition("some partition name"));
        }


        [Test]
        public void Finds_store_for_partition()
        {
            var matchingStore = MockRepository.GenerateMock<IEntityStore>();
            var nonMatchingStore = MockRepository.GenerateMock<IEntityStore>();

            var sut = new RegexDispatcherEntityStore();
            sut.RegisterPartitionEntityStore(new Regex("123"), nonMatchingStore);
            sut.RegisterPartitionEntityStore(new Regex("ABC"), matchingStore);

            Assert.AreSame(matchingStore, sut.FindEntityStoreForPartition("ABC"));
        }

        
        [Test]
        public void Uses_default_store_if_no_other_matches()
        {
            var defaultEntityStore = MockRepository.GenerateMock<IEntityStore>();
            var nonMatchingStore = MockRepository.GenerateMock<IEntityStore>();

            var sut = new RegexDispatcherEntityStore();
            sut.RegisterPartitionEntityStore(new Regex("123"), nonMatchingStore);
            sut.RegisterDefaultPartitionEntityStore(defaultEntityStore);

            Assert.AreSame(defaultEntityStore, sut.FindEntityStoreForPartition("ABC"));
        }
    }
}
